home *** CD-ROM | disk | FTP | other *** search
- #! /bin/sh
- # ^^ THIS SHELL NEEDS BUILT-IN echo TO DO LOOP BELOW EFFICIENTLY.
- # $Header: /home/jerry/.lib/at_cron/RCS/mhlinks.build,v 1.4 92/08/09 23:32:44 jerry mh_contrib $
- ### mhlinks.build - build database for 'mhlinks' program
- ### Usage: mhlinks.build [output file]
- ##
- ## mhlinks.build BUILDS A DATABASE FOR THE mhlinks COMMAND.
- ## THE DATABASE LISTS EACH MESSAGE FILE, SORTED BY I-NUMBER.
- ## THE DEFAULT FILENAME IS <MH-dir>/mhlinks.list; YOU CAN CHANGE
- ## THAT BY GIVING A PATHNAME ON THE COMMAND LINE.
- ##
- ## THE FILE IS ACTUALLY COMPRESSED AND HAS A '.Z' AT THE END...
- ## BUT YOU SHOULD *NOT* ADD A .Z TO YOUR NAME.
- ##
- ## mhlinks.build ONLY LOOKS INTO THE FOLDERS IN YOUR MH MAIL DIRECTORY.
- ## IT WON'T LOOK INTO ANYTHING BESIDES DIRECTORIES. THAT'S BECAUSE
- ## THE READ-ONLY FOLDERS OR SYMLINKS MIGHT POINT TO ANOTHER FILESYSTEM,
- ## WHERE THE I-NUMBERS DON'T MAKE SENSE.
- #
- # NOTE TO HACKERS: TABSTOPS SET AT 4 IN THIS CODE
- #
- # USE AT YOUR OWN RISK. SEEMS TO WORK, BUT IT'S YOUR RESPONSIBILITY!
- # PLEASE TELL ME ABOUT BUGS AND FIXES: Jerry Peek, jerry@ora.com
-
- colrm=/usr/ucb/colrm # DELETES COLUMNS (YOU CAN ADAPT TO USE cut -c)
- compress=/usr/ucb/compress # COMPRESSES FROM stdin TO stdout
- find=/bin/find # MUST HAVE A -ls OPERATOR
- lastinum= # INITIALIZE I-NUMBER OF PREVIOUS FILE
- mh=/usr/local/mh # WHERE MH COMMANDS LIVE
- mhdir="`$mh/mhpath +`" # MH MAIL DIRECTORY
- sort=/bin/sort
-
- outfile=${1-$mhdir/mhlinks.list}.Z
- > "$outfile"
- if [ ! -w "$outfile" ]
- then
- echo "`basename $0`: can't write to output file '$outfile'." 1>&2
- exit 1
- fi
-
- # GO TO MH DIRECTORY SO FOLDER NAMES WILL BE SAME AS DIRECTORY NAMES.
- cd $mhdir || exit 1
- # GET LIST OF TOP-LEVEL DIRECTORIES WITH INNER find AND GIVE TO
- # OUTER find LIKE afolder bfolder inbox ETC. DO THIS TO MAKE
- # FILE PATHNAMES NEAT FOR INNER find. (IS THERE A BETTER WAY?)
- $find `$find * -prune -type d -print` -name '[1-9]*' -type f -ls |
- # STRIP OUT MIDDLE OF EACH LINE, LEAVE I-NUMBER AND PATHNAME:
- $colrm 7 65 |
- # SORT ASCII, NOT NUMERIC (DOES IT MATTER?):
- $sort |
- # BUILD A LINE THAT HAS ONE I-NUMBER AND ALL ITS PATHNAMES:
- while read inum path
- do
- case "$inum" in
- "$lastinum")
- paths="$paths $path"
- ;;
- *) # MAKE SURE THAT THERE'S A SPACE AFTER LAST PATHNAME
- # SO THAT ALL PATHS WILL HAVE SPACE AROUND THEM (FOR MATCHING):
- echo "$lastinum $paths "
- lastinum="$inum"
- paths="$path"
- ;;
- esac
- done |
- # COMPRESS AS THE DATA FLIES BY... TO SAVE SPACE:
- $compress > $outfile
-
- # NEED TO CHECK FOR ERRORS
-